import router from '@/Router/index'
import pinia from '@/stores'
import { useUserInfoStore } from '@/stores/userInfo'
import loginApis from '@/api/login'
import { ElMessage } from 'element-plus'

const userInfoStore = useUserInfoStore(pinia)

// 不用进行token检查的白名单路径数组
const whiteList = ['/login','/home/resource/recommend','/home/resource/information','/home/course/vip_zone','/home/course/video_courses']

// 路由加载前
try {
  router.beforeEach(async (to, from, next) => {


    const token = userInfoStore.token
    // 如果token存在(已经登陆或前面登陆过)
    if (token) {
      // 如果请求的是登陆路由
      if (to.path === '/login') {
        // 直接跳转到根路由, 并完成进度条
        next({ path: '/' })
      } else { // 请求的不是登陆路由
        // 是否已经有用户信息
        const hasLogin = !!userInfoStore.userinfo.name
        // 如果有用户信息直接放行
        if (hasLogin) {
          next()
        } else { // 如果还没有用户信息
          try {
            // 异步请求获取用户信息(包含权限数据) ==> 动态注册用户的权限路由 => 当次跳转不可见
            const result = await loginApis.info()
            userInfoStore.userinfo = result;
            next(to) // 重新跳转去目标路由, 能看到动态添加的异步路由, 且不会丢失参数
  
          } catch (error: any) { // 如果请求处理过程中出错
            // 重置用户信息
            await userInfoStore.reset()
            next(`/login?redirect=${to.path}`)
          }
        }
      }
    } else { // 没有token
      // 如果目标路径在白名单中(是不需要token的路径)
      if (whiteList.indexOf(to.path) !== -1) {
        // 放行
        next()
      } else {
        // 如果没在白名单中, 跳转到登陆路由携带原目标路径
        next(`/login?redirect=${to.path}`)
        // 完成进度条  当次跳转中断了, 要进行一个新的跳转了
      }
    }
  })
  
} catch (error) {
  console.log(error)
}
// 路由加载后
// router.afterEach(() => {
// 	NProgress.done();
// })
